home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / data / awkscrpt / strlib.awk < prev    next >
Text File  |  1995-02-11  |  9KB  |  427 lines

  1. # 文字列操作関数ライブラリ
  2.  
  3. # sed の y///、perl の tr/// もどき関数
  4. function tr(s,t,v  ,i,l) {
  5.     s=exhyp(s)
  6.     t=exhyp(t)
  7.     l=jlength(s)
  8.     for(i=1; i<=l; i++) {
  9.         gsub(jsubstr(s,i,1),jsubstr(t,i,1),v)
  10.     }
  11.     return v
  12. }
  13. # 上の tr() より下の y() が2~6倍高速
  14. function y(s,t,v  ,ss,c) {
  15.     ss=exhyp(s)
  16.     t=exhyp(t)
  17.     s="[" s "]"
  18.     while( match(v,s) ) {
  19.         c=substr(v,RSTART,RLENGTH)
  20.         gsub(c, jsubstr(t,jindex(ss,c),1), v)
  21.     }
  22.     return v
  23. }
  24. function exhyp(v) {
  25.     if( !index(v,"-") ) return v
  26.     sub(/0-9/,"0123456789",v)
  27.     sub(/A-Z/,"ABCDEFGHIJKLMNOPQRSTUVWXYZ",v)
  28.     sub(/a-z/,"abcdefghijklmnopqrstuvwxyz",v)
  29.     sub(/0-9/,"0123456789",v)
  30.     sub(/a-z/,"abcdefghijklmnopqrstuvwxyz",v)
  31.     sub(/A-Z/,"ABCDEFGHIJKLMNOPQRSTUVWXYZ",v)
  32.     sub(/ぁ-ん/,"ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん",v)
  33.     sub(/ァ-ン/,"ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲン",v)
  34.     return v
  35. }
  36.  
  37. # 全角文字→半角文字変換
  38. #function tohan(s) {
  39. #    s=y("0-9A-Za-z","0-9A-Za-z",s)
  40. #    return s
  41. #}
  42. # 上のよりも下の関数の方が速い場合がある。
  43. function tohan(s) {
  44.     gsub(/0/,"0",s)
  45.     gsub(/1/,"1",s)
  46.     gsub(/2/,"2",s)
  47.     gsub(/3/,"3",s)
  48.     gsub(/4/,"4",s)
  49.     gsub(/5/,"5",s)
  50.     gsub(/6/,"6",s)
  51.     gsub(/7/,"7",s)
  52.     gsub(/8/,"8",s)
  53.     gsub(/9/,"9",s)
  54.     gsub(/A/,"A",s)
  55.     gsub(/B/,"B",s)
  56.     gsub(/C/,"C",s)
  57.     gsub(/D/,"D",s)
  58.     gsub(/E/,"E",s)
  59.     gsub(/F/,"F",s)
  60.     gsub(/G/,"G",s)
  61.     gsub(/H/,"H",s)
  62.     gsub(/I/,"I",s)
  63.     gsub(/J/,"J",s)
  64.     gsub(/K/,"K",s)
  65.     gsub(/L/,"L",s)
  66.     gsub(/M/,"M",s)
  67.     gsub(/N/,"N",s)
  68.     gsub(/O/,"O",s)
  69.     gsub(/P/,"P",s)
  70.     gsub(/Q/,"Q",s)
  71.     gsub(/R/,"R",s)
  72.     gsub(/S/,"S",s)
  73.     gsub(/T/,"T",s)
  74.     gsub(/U/,"U",s)
  75.     gsub(/V/,"V",s)
  76.     gsub(/W/,"W",s)
  77.     gsub(/X/,"X",s)
  78.     gsub(/Y/,"Y",s)
  79.     gsub(/Z/,"Z",s)
  80.     gsub(/a/,"a",s)
  81.     gsub(/b/,"b",s)
  82.     gsub(/c/,"c",s)
  83.     gsub(/d/,"d",s)
  84.     gsub(/e/,"e",s)
  85.     gsub(/f/,"f",s)
  86.     gsub(/g/,"g",s)
  87.     gsub(/h/,"h",s)
  88.     gsub(/i/,"i",s)
  89.     gsub(/j/,"j",s)
  90.     gsub(/k/,"k",s)
  91.     gsub(/l/,"l",s)
  92.     gsub(/m/,"m",s)
  93.     gsub(/n/,"n",s)
  94.     gsub(/o/,"o",s)
  95.     gsub(/p/,"p",s)
  96.     gsub(/q/,"q",s)
  97.     gsub(/r/,"r",s)
  98.     gsub(/s/,"s",s)
  99.     gsub(/t/,"t",s)
  100.     gsub(/u/,"u",s)
  101.     gsub(/v/,"v",s)
  102.     gsub(/w/,"w",s)
  103.     gsub(/x/,"x",s)
  104.     gsub(/y/,"y",s)
  105.     gsub(/z/,"z",s)
  106.     return s
  107. }
  108.  
  109. # 半角文字→全角文字変換
  110. #function tozen(s) {
  111. #    s=y("0-9A-Za-z","0-9A-Za-z",s)
  112. #    return s
  113. #}
  114. # 上のよりも下の関数の方が速い場合がある。
  115. function tozen(s) {
  116.     gsub(/0/,"0",s)
  117.     gsub(/1/,"1",s)
  118.     gsub(/2/,"2",s)
  119.     gsub(/3/,"3",s)
  120.     gsub(/4/,"4",s)
  121.     gsub(/5/,"5",s)
  122.     gsub(/6/,"6",s)
  123.     gsub(/7/,"7",s)
  124.     gsub(/8/,"8",s)
  125.     gsub(/9/,"9",s)
  126.     gsub(/A/,"A",s)
  127.     gsub(/B/,"B",s)
  128.     gsub(/C/,"C",s)
  129.     gsub(/D/,"D",s)
  130.     gsub(/E/,"E",s)
  131.     gsub(/F/,"F",s)
  132.     gsub(/G/,"G",s)
  133.     gsub(/H/,"H",s)
  134.     gsub(/I/,"I",s)
  135.     gsub(/J/,"J",s)
  136.     gsub(/K/,"K",s)
  137.     gsub(/L/,"L",s)
  138.     gsub(/M/,"M",s)
  139.     gsub(/N/,"N",s)
  140.     gsub(/O/,"O",s)
  141.     gsub(/P/,"P",s)
  142.     gsub(/Q/,"Q",s)
  143.     gsub(/R/,"R",s)
  144.     gsub(/S/,"S",s)
  145.     gsub(/T/,"T",s)
  146.     gsub(/U/,"U",s)
  147.     gsub(/V/,"V",s)
  148.     gsub(/W/,"W",s)
  149.     gsub(/X/,"X",s)
  150.     gsub(/Y/,"Y",s)
  151.     gsub(/Z/,"Z",s)
  152.     gsub(/a/,"a",s)
  153.     gsub(/b/,"b",s)
  154.     gsub(/c/,"c",s)
  155.     gsub(/d/,"d",s)
  156.     gsub(/e/,"e",s)
  157.     gsub(/f/,"f",s)
  158.     gsub(/g/,"g",s)
  159.     gsub(/h/,"h",s)
  160.     gsub(/i/,"i",s)
  161.     gsub(/j/,"j",s)
  162.     gsub(/k/,"k",s)
  163.     gsub(/l/,"l",s)
  164.     gsub(/m/,"m",s)
  165.     gsub(/n/,"n",s)
  166.     gsub(/o/,"o",s)
  167.     gsub(/p/,"p",s)
  168.     gsub(/q/,"q",s)
  169.     gsub(/r/,"r",s)
  170.     gsub(/s/,"s",s)
  171.     gsub(/t/,"t",s)
  172.     gsub(/u/,"u",s)
  173.     gsub(/v/,"v",s)
  174.     gsub(/w/,"w",s)
  175.     gsub(/x/,"x",s)
  176.     gsub(/y/,"y",s)
  177.     gsub(/z/,"z",s)
  178.     return s
  179. }
  180.  
  181. # ひらがな→カタカナ変換
  182. #function tokata(s) {
  183. #    gsub(/う゛/,"ヴ",s)
  184. #    s=y("ぁ-ん","ァ-ン",s)
  185. #    return s
  186. #}
  187. function tokata(s) {
  188.     gsub(/う゛/,"ヴ",s)
  189.     gsub(/あ/,"ア",s)
  190.     gsub(/い/,"イ",s)
  191.     gsub(/う/,"ウ",s)
  192.     gsub(/え/,"エ",s)
  193.     gsub(/お/,"オ",s)
  194.     gsub(/か/,"カ",s)
  195.     gsub(/き/,"キ",s)
  196.     gsub(/く/,"ク",s)
  197.     gsub(/け/,"ケ",s)
  198.     gsub(/こ/,"コ",s)
  199.     gsub(/さ/,"サ",s)
  200.     gsub(/し/,"シ",s)
  201.     gsub(/す/,"ス",s)
  202.     gsub(/せ/,"セ",s)
  203.     gsub(/そ/,"ソ",s)
  204.     gsub(/た/,"タ",s)
  205.     gsub(/ち/,"チ",s)
  206.     gsub(/つ/,"ツ",s)
  207.     gsub(/て/,"テ",s)
  208.     gsub(/と/,"ト",s)
  209.     gsub(/な/,"ナ",s)
  210.     gsub(/に/,"ニ",s)
  211.     gsub(/ぬ/,"ヌ",s)
  212.     gsub(/ね/,"ネ",s)
  213.     gsub(/の/,"ノ",s)
  214.     gsub(/は/,"ハ",s)
  215.     gsub(/ひ/,"ヒ",s)
  216.     gsub(/ふ/,"フ",s)
  217.     gsub(/へ/,"ヘ",s)
  218.     gsub(/ほ/,"ホ",s)
  219.     gsub(/ま/,"マ",s)
  220.     gsub(/み/,"ミ",s)
  221.     gsub(/む/,"ム",s)
  222.     gsub(/め/,"メ",s)
  223.     gsub(/も/,"モ",s)
  224.     gsub(/や/,"ヤ",s)
  225.     gsub(/ゆ/,"ユ",s)
  226.     gsub(/よ/,"ヨ",s)
  227.     gsub(/ら/,"ラ",s)
  228.     gsub(/り/,"リ",s)
  229.     gsub(/る/,"ル",s)
  230.     gsub(/れ/,"レ",s)
  231.     gsub(/ろ/,"ロ",s)
  232.     gsub(/わ/,"ワ",s)
  233.     gsub(/を/,"ヲ",s)
  234.     gsub(/ん/,"ン",s)
  235.     gsub(/が/,"ガ",s)
  236.     gsub(/ぎ/,"ギ",s)
  237.     gsub(/ぐ/,"グ",s)
  238.     gsub(/げ/,"ゲ",s)
  239.     gsub(/ご/,"ゴ",s)
  240.     gsub(/ざ/,"ザ",s)
  241.     gsub(/じ/,"ジ",s)
  242.     gsub(/ず/,"ズ",s)
  243.     gsub(/ぜ/,"ゼ",s)
  244.     gsub(/ぞ/,"ゾ",s)
  245.     gsub(/だ/,"ダ",s)
  246.     gsub(/ぢ/,"ヂ",s)
  247.     gsub(/づ/,"ヅ",s)
  248.     gsub(/で/,"デ",s)
  249.     gsub(/ど/,"ド",s)
  250.     gsub(/ば/,"バ",s)
  251.     gsub(/び/,"ビ",s)
  252.     gsub(/ぶ/,"ブ",s)
  253.     gsub(/べ/,"ベ",s)
  254.     gsub(/ぼ/,"ボ",s)
  255.     gsub(/ぱ/,"パ",s)
  256.     gsub(/ぴ/,"ピ",s)
  257.     gsub(/ぷ/,"プ",s)
  258.     gsub(/ぺ/,"ペ",s)
  259.     gsub(/ぽ/,"ポ",s)
  260.     gsub(/ぁ/,"ァ",s)
  261.     gsub(/ぃ/,"ィ",s)
  262.     gsub(/ぅ/,"ゥ",s)
  263.     gsub(/ぇ/,"ェ",s)
  264.     gsub(/ぉ/,"ォ",s)
  265.     gsub(/っ/,"ッ",s)
  266.     gsub(/ゃ/,"ャ",s)
  267.     gsub(/ゅ/,"ュ",s)
  268.     gsub(/ょ/,"ョ",s)
  269.     gsub(/ゎ/,"ヮ",s)
  270.     return s
  271. }
  272.  
  273. # カタカナ→ひらがな変換
  274. #function tohira(s) {
  275. #    gsub(/ヴ/,"う゛",s)
  276. #    s=y("ァ-ン","ぁ-ん",s)
  277. #    return s
  278. #}
  279. function tohira(s) {
  280.     gsub(/ヴ/,"う゛",s)
  281.     gsub(/ア/,"あ",s)
  282.     gsub(/イ/,"い",s)
  283.     gsub(/ウ/,"う",s)
  284.     gsub(/エ/,"え",s)
  285.     gsub(/オ/,"お",s)
  286.     gsub(/カ/,"か",s)
  287.     gsub(/キ/,"き",s)
  288.     gsub(/ク/,"く",s)
  289.     gsub(/ケ/,"け",s)
  290.     gsub(/コ/,"こ",s)
  291.     gsub(/サ/,"さ",s)
  292.     gsub(/シ/,"し",s)
  293.     gsub(/ス/,"す",s)
  294.     gsub(/セ/,"せ",s)
  295.     gsub(/ソ/,"そ",s)
  296.     gsub(/タ/,"た",s)
  297.     gsub(/チ/,"ち",s)
  298.     gsub(/ツ/,"つ",s)
  299.     gsub(/テ/,"て",s)
  300.     gsub(/ト/,"と",s)
  301.     gsub(/ナ/,"な",s)
  302.     gsub(/ニ/,"に",s)
  303.     gsub(/ヌ/,"ぬ",s)
  304.     gsub(/ネ/,"ね",s)
  305.     gsub(/ノ/,"の",s)
  306.     gsub(/ハ/,"は",s)
  307.     gsub(/ヒ/,"ひ",s)
  308.     gsub(/フ/,"ふ",s)
  309.     gsub(/ヘ/,"へ",s)
  310.     gsub(/ホ/,"ほ",s)
  311.     gsub(/マ/,"ま",s)
  312.     gsub(/ミ/,"み",s)
  313.     gsub(/ム/,"む",s)
  314.     gsub(/メ/,"め",s)
  315.     gsub(/モ/,"も",s)
  316.     gsub(/ヤ/,"や",s)
  317.     gsub(/ユ/,"ゆ",s)
  318.     gsub(/ヨ/,"よ",s)
  319.     gsub(/ラ/,"ら",s)
  320.     gsub(/リ/,"り",s)
  321.     gsub(/ル/,"る",s)
  322.     gsub(/レ/,"れ",s)
  323.     gsub(/ロ/,"ろ",s)
  324.     gsub(/ワ/,"わ",s)
  325.     gsub(/ヲ/,"を",s)
  326.     gsub(/ン/,"ん",s)
  327.     gsub(/ガ/,"が",s)
  328.     gsub(/ギ/,"ぎ",s)
  329.     gsub(/グ/,"ぐ",s)
  330.     gsub(/ゲ/,"げ",s)
  331.     gsub(/ゴ/,"ご",s)
  332.     gsub(/ザ/,"ざ",s)
  333.     gsub(/ジ/,"じ",s)
  334.     gsub(/ズ/,"ず",s)
  335.     gsub(/ゼ/,"ぜ",s)
  336.     gsub(/ゾ/,"ぞ",s)
  337.     gsub(/ダ/,"だ",s)
  338.     gsub(/ヂ/,"ぢ",s)
  339.     gsub(/ヅ/,"づ",s)
  340.     gsub(/デ/,"で",s)
  341.     gsub(/ド/,"ど",s)
  342.     gsub(/バ/,"ば",s)
  343.     gsub(/ビ/,"び",s)
  344.     gsub(/ブ/,"ぶ",s)
  345.     gsub(/ベ/,"べ",s)
  346.     gsub(/ボ/,"ぼ",s)
  347.     gsub(/パ/,"ぱ",s)
  348.     gsub(/ピ/,"ぴ",s)
  349.     gsub(/プ/,"ぷ",s)
  350.     gsub(/ペ/,"ぺ",s)
  351.     gsub(/ポ/,"ぽ",s)
  352.     gsub(/ァ/,"ぁ",s)
  353.     gsub(/ィ/,"ぃ",s)
  354.     gsub(/ゥ/,"ぅ",s)
  355.     gsub(/ェ/,"ぇ",s)
  356.     gsub(/ォ/,"ぉ",s)
  357.     gsub(/ッ/,"っ",s)
  358.     gsub(/ャ/,"ゃ",s)
  359.     gsub(/ュ/,"ゅ",s)
  360.     gsub(/ョ/,"ょ",s)
  361.     gsub(/ヮ/,"ゎ",s)
  362.     return s
  363. }
  364.  
  365. # /[ぁ-ん]-/の表現を/[ぁ-ん][あお]/に変換
  366. function notyo(s) {
  367.     gsub(/[ぁ-ん]-/,"&ー",s)
  368.     gsub(/[あかさたなはまやらわがざだばぱぁゃゎ]-ー/,"&あ",s)
  369.     gsub(/[いきしちにひみりゐぎじぢびぴぃ]-ー/,"&い",s)
  370.     gsub(/[うくすつぬふむゆるぐずづぶぷぅゅ]-ー/,"&う",s)
  371.     gsub(/[えけせてねへめれゑげぜでべぺぇ]-ー/,"&え",s)
  372.     gsub(/[おこそとのほもよろをごぞどぼぽぉょ]-ー/,"&お",s)
  373.     gsub(/-ー/,"",s)
  374.     return s
  375. }
  376.  
  377. # /[ぁ-ん]-/の表現を/[ぁ-ん][あお]/に変換
  378. function notyo2(s) {
  379.     gsub(/[ぁ-ん]-/,"&ー",s)
  380.     gsub(/[あかさたなはまやらわがざだばぱぁゃゎ]-ー/,"&あ",s)
  381.     gsub(/[いきしちにひみりゐぎじぢびぴぃ]-ー/,"&い",s)
  382.     gsub(/[うくすつぬふむゆるぐずづぶぷぅゅ]-ー/,"&う",s)
  383.     gsub(/[えけせてねへめれゑげぜでべぺぇ]-ー/,"&い",s)
  384.     gsub(/[おこそとのほもよろをごぞどぼぽぉょ]-ー/,"&う",s)
  385.     gsub(/-ー/,"",s)
  386.     return s
  387. }
  388.  
  389. # /[ぁ-ん][あお]/の表現を/[ぁ-ん]-/に変換
  390. function tyo(s) {
  391.     gsub(/[あかさたなはまやらわがざだばぱぁゃゎ]あ/,"&ー",s)
  392.     gsub(/[えけせてねへめれゑげぜでべぺぇ]え/,"&ー",s)
  393.     gsub(/[えけせてねへめれゑげぜでべぺぇ]い/,"&ー",s)
  394.     gsub(/[いきしちにひみりゐぎじぢびぴぃ]い/,"&ー",s)
  395.     gsub(/[おこそとのほもよろをごぞどぼぽぉょ]お/,"&ー",s)
  396.     gsub(/[おこそとのほもよろをごぞどぼぽぉょ]う/,"&ー",s)
  397.     gsub(/[うくすつぬふむゆるぐずづぶぷぅゅ]う/,"&ー",s)
  398.     gsub(/[あいうえお]ー/,"-",s)
  399.     return s
  400. }
  401.  
  402. # ひらがな小文字→ひらがな大文字
  403. #function omoji(s) {
  404. #    s=y("ぁぃぅぇぉっゃゅょゎ","あいうえおつやゆよわ",s)
  405. #    return s
  406. #}
  407. function omoji(s) {
  408.     gsub(/ぁ/,"あ",s)
  409.     gsub(/ぃ/,"い",s)
  410.     gsub(/ぅ/,"う",s)
  411.     gsub(/ぇ/,"え",s)
  412.     gsub(/ぉ/,"お",s)
  413.     gsub(/っ/,"つ",s)
  414.     gsub(/ゃ/,"や",s)
  415.     gsub(/ゅ/,"ゆ",s)
  416.     gsub(/ょ/,"よ",s)
  417.     gsub(/ゎ/,"わ",s)
  418.     return s
  419. }
  420.  
  421. # 任意の文字のn個の文字列を返す 入力 c:任意の文字, n:文字列の個数
  422. function nstring(c,n  ,s) {
  423.     s=sprintf("%" n "s","")
  424.     gsub(" ",c,s)
  425.     return s
  426. }
  427.